| <<<предыдущая глава | к содержанию | следующая глава >>> |
При реализации многих задач, связанных с матричной алгеброй, полезными могут оказаться функции для оценок основных характеристик:
det(A) - определитель квадратной матрицы;
rank(A) - ранг матрицы;
trace(A) - след матрицы (сумма элементов главной диагонали);
>> A=[1 2 3; 5 4 3; 3 4 3]
| >> det(A) ans =12 | >> rank(A) ans = 3 | >> trace(A) ans = 8 |
Выше среди операций системы мы уже упоминали операцию транспонирования матрицы:
>> A=[ 1 2 3 ; 23 11 0]
| >> B=A'
| |||||||||||||||||||||
>> A=[1 2 3; 5 4 3; 3 4 3]
| >>D=A^(-1)
| >> A^0
| ||||||||||||||||||||||||||||||||||||||||||||||||
При решении многих задач (например, при оценке сходимости методов) используется понятие нормы вектора (матрицы). В рас-сматриваемой системе для поиска нормы предлагается функции norm(A) и norm(A, k).
Если А - вектор, то норма определяется (по умолчанию k=2)
;
при k=inf и k=-inf соответственно |A|= max(|Ai|) и |A|= min(|Ai|);
| >>v=[3 4 -10] v = 3 4 -10 | >> norm(v) ans = 11.1803 | >> norm(v,2) ans = 11.1803 | >> norm(v,inf) ans = 10 | >>norm(v,-inf) ans = 3 |
| >> norm(v,1) ans = 17 >> | norm(v,-1) ans = 1.4634 | >>norm(v,3) ans = 10.2946 | >>norm(v,'fro') ans = 11.1803 |
Если А - матрица, то норма определяется только для k=1, 2, inf и fro (по умолчанию k=2):
k=1 -
;
k=2 - max(svd(A)) - максимальное из сингулярных чисел матрицы (значений квадратных корней из собственных чисел матрицы А'А);
k=inf -
; k='fro' -
, B=A'*A:
| >> norm(A,1) ans = 10 | >> norm(A) ans = 9.6871 | >>norm(A,inf) ans = 12 | >>norm(A,'fro') ans = 9.8995 |
Для задачи решения системы линейных алгебраических уравнений, одной из популярнейших в вычислительной математике, предусмотрены даже "элементарные" операции для подобной задачи.
Так для решения системы AX=B (A -матрица коэффициентов размерности mґn, B- матрица правых частей размерности n x k, Х - матрица из k векторов-столбцов решений) можно использовать команду обратного деления "\". Например, для решения системы
x1+2 x2+3 x3 = 3 (или 3)
5 x1+4 x2+3 x3 = 9 (или 9)
3 x1+4 x2+3 x3 = 6 (или 7)
задаем (построчно) матрицу коэффициентов и векторов правой части
>> A=[1 2 3; 5 4 3; 3 4 3]
| >> B=[3 3; 9 9; 6 7]
|
| >> X=A\B | X =1.5000 | 1.0000 |
| 0.0000 | 1.0000 | |
| 0.5000 | 0 |
При решении системы XA=B можно воспользоваться операцией обычного деления. Так решение той же системы
| >>X=B'/A' | X = 1.5000 | -0.0000 | 0.5000 |
| 1.0000 | 1.0000 | 0 |
Под кажущейся простотой решения скрывается достаточно серьезный анализ структуры матрицы и использование лучшего по точности и быстродействию алгоритма (метод Гаусса, разложение Холецкого и др.)
Для прямоугольной матрицы А (m№n) решение строится по минимуму квадрата ошибки (используется QR-разложение на основе преобразований Хаусхолдера) и не сопровождается сообщениями о множественности решений или переопределенности системы:
одно уравнение с 3 неизвестными:
| три уравнения с 2 неизвестными:
|
Естественно, что квадратная матрица коэффициентов должна быть невырожденной (определитель отличен от нуля) и в противном случае выдается сообщение Matrix is singular to working precision и элементы решения принимают значения inf (не определено).
Особого упоминания заслуживает обращение (инверсия) матрицы, для которого предусмотрена операция возведения в степень -1 и функция inv(A):
>> A=[1 2 3; 5 4 3; 3 4 3]
| >> C=inv(A)
| >> D=A^(-1)
| ||||||||||||||||||||||||||||||||||||
Напомним, что обращение матрицы может оказаться полезным при решении системы AX=B в виде X=A-1B:
>> B=[3 3; 9 9; 6 7]
| >> X=inv(A)*B
|
При решении линейных систем и других задач интересно пред-ставление матрицы разложением на матрицы упрощенной структуры.
[L,U]=lu(A) - дает т.н. LU-разложение произвольной квадратной матицы в виде произведения нижней и верхней треугольных матриц A=LU (в матрице L возможны перестановки); такое представление позволяет, в частности, решение системы АХ=В свести к двум простым системам LZ=B, UX=Z .
[L,U,P]=lu(A) - дает LU-разложение c выводом матрицы перестановок Р такой, что PA=LU.
A =
| >> [L,U]=lu(A)
|
| |||||||||||||||||||||||||||||||||
>> [L,U,P]=lu(A)
|
|
| ||||||||||||||||||||||||||||||||||||
R=chol(A), [R,p] =chol(A) - дает разложение Холецкого для по-ложительно определенной симметрической матрицы A=RўR, где R - верхняя треугольная матрица. Если матрица А не является положительно определенной, то в первом варианте возникает сообщение об ошибке и во втором R - матрица порядка q=p-1:
C =
| R=chol(С) ??? Error using ==> chol Matrix must be positive definite | >> [R,p]=chol(С)
|
В приведенном примере лишь первые два главных минора положительны (det(С)= -3) и, соответственно, q=2 и RўR дает второй главный минор матрицы С.
[Q,R]=qr(A), [Q,R,P]=qr(A), [Q,R]=qr(A,0) находит QR-разложение для прямоугольной матрицы размерности m x n:
[Q,R]=qr(A) - в виде A=QR произведения унитарной матрицы Q (Q*Q'=E) и верхней треугольной матрицы R :
C =
| >> [Q,R]=qr(С)
|
| |||||||||||||||||||||||||||||
t =
| >>[Q,R]=qr(t)
| R =
|
[Q,R,P]=qr(A) отличается от предыдущего упорядочением по убыванию модулей диагональных элементов R и наличием соответст-вующей матрицы перестановок Р (A*P'=Q*R);
[Q,R]=qr(A,0) при m>n отличается тем, что вычисляются лишь n столбцов матрицы Q.
Если после выполнения QR-разложения выполнить команду [Q1,R1]=qrdelete(Q,R,k), то будет выполнен пересчет матриц для варианта, когда в матрице А удален k-й столбец. Если после QR-разложения выполнить команду [Q1,R1]=qrdelete(Q,R,k,X), то будут пересчитаны матрицы для варианта, когда в матрице А перед столбцом k вставлен столбец Х.
X=nnis(A,B), X=nnis(A,B,t) позволяют искать решение системы АХ=В методом наименьших квадратов, где отыскиваются неотрицательные решения Х, минимизирующие norm(A*X-B) или гарантирующие точность e при задании t=max(m,n)*norm(A,1)* e.
Особое место в библиотеке занимают средства для вычисления собственных чисел и векторов.
В простейшем варианте отыскиваются ненулевые решения системы АХ=lX командами d=eig(A) или [X,d]=eig(A) (d- диагональная матрица собственных чисел, Х -матрица из нормированных собственных векторов):
a =
| >>d=eig(a) d =
| >> [R,d]=eig(a) R =
| d =
|
Для проверки качества поиска (при значительных размерностях и многочисленных особых случаях такая проверка весьма желатель-на) достаточно проверить на близость к нулю значений A*X=R*D:
| >>a*R-R*d | ||
| ans = 1.0e-014 * | ||
| 0.0583 | 0.0666 | -0.7549 |
| 0.0166 | -0.0444 | -0.5329 |
| 0.0902 | -0.3886 | -0.7105 |
Функции d=eig(A,B) и [V,D]= eig(A,B) позволяют решать полную (обобщенную) проблему собственных значений АХ=lBX.
Решение задачи осуществляется на основе QR-алгоритма и его модификаций и при числе итераций, превышающем 30Ч n, может быть прервано с сообщением Solution will not converge (решение не сходится).
Проблему собственных значений можно решать и для матричного полинома (A0+lA1l2A2+...+lpAp)X=0 командой [R,d]=polyeig(A0,A1p), где R- матрица размера n x (n x p) собственных векторов. При р=0 эта функция тождественна eig(A0) , при р=1 - eig(A0,-A1) и в случае матриц с n=1 (скаляров) - roots(Ap,...,A1,A0), то есть ищет корни уравнения Aplp+...+ A2l2 +A1l +A0=0.
Для решения ряда задач используется функция сингулярного разложения матрицы в формах s=svd(A), [U,S,V]=svd(A), [U,S,V]=svd(A,0) - матрица А размерности m x n (mіn) представляется в виде A=U*S*Vў, где Uў*U=V*Vў=E, S=diag(s1,s2,...,sn). Здесь U состоит из n собственных векторов для n наибольших собственных зна-чений матрицы ААў, а V - из ортонормированных собственных векторов матрицы АўА; на диагонали матрицы S - значения квадратных корней из собственных чисел матрицы АўА (сингулярные числа).
| <<<предыдущая глава | к содержанию | следующая глава >>> |